/*
 * 给定一个整数，计算其阶乘结果的十进制表示法中有几个0。
 * 给定一个整数，计算其阶乘结果的二进制表示法中最低位1的位置。
 */

#include <stdio.h>

//计算第一个问题
//解法一
int zero_in_jiecheng(int num);
//解法二
int zero_in_jiecheng_other(int num);

//计算第二个问题
//解法一
int position_in_jiecheng(int num);
//解法二
int position_in_jiecheng_other(int num);

int zero_in_jiecheng(int num)
{
    int count = 0;
    for (int i=5; i < num; i *= 5) {
        count = num / i;
    }
    return count;
}

int zero_in_jiecheng_other(int num)
{
    int count = 0;
    while (num) {
        int ret = num;
        while (!(ret%5)) {
            count += 1;
            ret /= 5;
        }
        num--;
    }
    return count;
}

int position_in_jiecheng(int num)
{
    int count = 0;
    //此处用移位，等同于乘以2，但效率高
    for (int i=2; i < num; i <<= 1) {
        count += num / i;
    }
    return count;
}

int main()
{
    int i = 10;
    printf("%d\n", zero_in_jiecheng(i));
    printf("%d\n", zero_in_jiecheng_other(i));
    printf("%d\n", position_in_jiecheng(i));
}
